import { ElMessage, ElMessageBox } from 'element-plus';
// 基础工具，不应依赖其他资源
/** 开放 **/
/* 生成唯一键 */
// * @param {object} opts
// * @param {string=} opts.key 前缀
// * @param {string=} opts.pattern 模式，其中的 x、y 将会被替换为随机字符串，默认为：'xxxyxxxy'
const generateGuid = function(opts) {
    opts = {
        key: '',
        pattern: 'xxxyxxxy',
        ...opts
    };
    const guid = opts.pattern.replace(/[xy]/g, function(c) {
        let r = Math.random() * 16 | 0,
            v = c === 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
    return (opts.key || '') + guid;
};

//示例：showAlert('提示信息', {}).then(fCb)
//fCb: function(action, instance)
//   action 的值为'confirm', 'cancel'或'close'
//   instance 为 ElMessageBox 实例，可以通过它访问实例上的属性和方法
const showAlert = (sMsg, opts = {}) => {
    return ElMessageBox.alert(sMsg, {
        showClose: false,
        ...opts
    });
};
//示例：showMsg('提示信息', {onClose:fOnClose})
//fOnClose：function(msg)
const showMsg = (sMsg, opts = {}) => {
    ElMessage({
        message: sMsg,
        onClose: opts.onClose,
        ...opts
    });
};
//示例：showConfirm('提示信息').then(fCbyes).catch(fCbno)
//fOnClose：function(msg)
const showConfirm = (sMsg, opts) => {
    return ElMessageBox.confirm(sMsg, {
        showClose: false,
        ...opts
    });
};

/**
 * @des 获取 url 中的参数集合。
 * @type function
 * @return {Object} obj 返回对象 以键(string)值(string)对组成的对象存储参数
 */
const getUrlParams = () => {
    //let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    //let url = window.location.hash.split('?')[1].match(reg);
    const aPath = window.location.href.split('?'),
        oParams = {};
    let aQuery, nQuery; //参数数组，每个项是一个参数对应的字符串，格式：key=val
    if (aPath.length > 1) {
        aQuery = aPath[1].split('&');
        nQuery = aQuery.length;
        for (let i = 0, sKey, sVal, aQueryItem; i < nQuery; i++) {
            aQueryItem = aQuery[i].split('=');
            sKey = aQueryItem[0]; // 键
            if (sKey) {
                //解码前的值中包含'#/'或'#/???'，说明是路由添加的'#/'，解码前移除
                sVal = aQueryItem.length > 1 ? decodeURIComponent(aQueryItem[1].replace(/#\/.*/, '')) : ''; // 值
                oParams[sKey] = sVal;
            }
        }
    }
    return oParams;
};

export {
    generateGuid,
    showAlert, //接口对比 wiFrame 有参数调整
    showMsg, //接口对比 wiFrame 有参数调整
    showConfirm, //接口对比 wiFrame 有参数调整
    getUrlParams
}